package in.rob.client; import in.lib.Constants; import in.lib.adapter.PhonePageAdapter; import in.lib.manager.CacheManager; import in.lib.manager.SettingsManager; import in.model.Post; import in.rob.client.base.RobinSlidingActivity; import in.rob.client.page.ThreadPage; import java.util.LinkedHashMap; import lombok.Setter; import android.content.Intent; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.nfc.NfcAdapter.CreateNdefMessageCallback; import android.nfc.NfcEvent; import android.os.Build; import android.os.Bundle; import android.os.Parcelable; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewConfiguration; import android.widget.Toast; /** * TODO: Add support to remember position * TODO: Figgure out pagination for pages < current * TODO: Add menu items + setup broadcast reciever */ public class ThreadActivity extends RobinSlidingActivity { private MenuItem mUnsubscribeMenu; @Setter private Post post; @Override public void onCreate(Bundle arg0) { super.onCreate(arg0); // if the intent extras are null but the saved instances isnt // reset the intent extras to the saved instances if (getIntent().getExtras() == null && arg0 != null) { getIntent().putExtras(arg0); } if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); if (adapter != null && adapter.isEnabled()) { adapter.setNdefPushMessageCallback(new CreateNdefMessageCallback() { @Override public NdefMessage createNdefMessage(NfcEvent event) { NdefMessage msg = new NdefMessage ( new NdefRecord[] { NdefRecord.createMime("application/vnd.in.rob.client.threadactivity", CacheManager.Serializer.serializeObject(getIntent().getExtras().get(Constants.EXTRA_POST))), NdefRecord.createApplicationRecord(getPackageName()) } ); return msg; } }, this); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { handleintent(getIntent()); } } } } @Override public void retrieveArguments(Bundle instances) { if (instances.containsKey(Constants.EXTRA_POST)) { post = (Post)instances.getParcelable(Constants.EXTRA_POST); } super.retrieveArguments(instances); } @Override protected void onSaveInstanceState(Bundle outState) { if (post != null) { outState.putParcelable(Constants.EXTRA_POST, post); } super.onSaveInstanceState(outState); } public void handleintent(Intent i) { Parcelable[] data = i.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (data != null) { NdefMessage msg = (NdefMessage)data[0]; post = (Post)CacheManager.Serializer.desterializeObject(msg.getRecords()[0].getPayload()); if (post == null) { Toast.makeText(getContext(), R.string.could_not_read_post, Toast.LENGTH_LONG).show(); finish(); return; } getIntent().putExtra(Constants.EXTRA_POST, post); } } @Override public void setup(boolean isPhone) { LinkedHashMap<Class, Bundle> pages = new LinkedHashMap<Class, Bundle>(1); Bundle bundle1 = new Bundle(); bundle1.putString(Constants.EXTRA_TITLE, getString(R.string.conversation)); bundle1.putAll(getIntent().getExtras()); pages.put(ThreadPage.class, bundle1); PhonePageAdapter adapter = new PhonePageAdapter(getContext(), getSupportFragmentManager(), getViewPager(), pages, getSupportActionBar().getCustomView()); getViewPager().setAdapter(adapter); setAdapter(adapter); getAdapter().setIndicatorVisible(false); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.thread, menu); if (Build.VERSION.SDK_INT >= 11 && ViewConfiguration.get(this).hasPermanentMenuKey()) { menu.getItem(0).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.getItem(0).setVisible(true); } mUnsubscribeMenu = menu.findItem(R.id.menu_mute); if (post != null && SettingsManager.isThreadMuted(post.getThreadId())) { mUnsubscribeMenu.setTitle(R.string.unmute_thread); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_mute) { SettingsManager settings = SettingsManager.getInstance(getContext()); if (SettingsManager.isThreadMuted(post.getThreadId())) { settings.unmuteThread(post.getThreadId()); mUnsubscribeMenu.setTitle(R.string.mute_thread); } else { settings.muteThread(post.getThreadId()); mUnsubscribeMenu.setTitle(R.string.unmute_thread); } } else if (item.getItemId() == R.id.menu_new_post) { getCurrentFragment().onOptionsItemSelected(item); } else if (item.getItemId() == R.id.menu_refresh) { ((ThreadPage)getAdapter().getCurrentFragment()).beginLoadFromApi(); } return super.onOptionsItemSelected(item); } @Override public boolean checkMenuKey(int keyCode) { return false; } @Override public void onClick(View v) { if (v.getId() == R.id.up_button) { Intent homeIntent = new Intent(getContext(), MainActivity.class); homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(homeIntent); return; } super.onClick(v); } }